"""
try:
   要捕捉的代码块
except:
   如果出现了异常，就执行这里的内容
finally:
    不管报错还是正常运行，都会执行这里
else:
   只有当不报错的时候，才会执行到这里
"""
# 当try捕捉到了异常
"""try:
    print(a) # 正常来说，会报错
except:
    print("捕捉到了异常信息！")
    print("报错了")
else:
    print("程序代码运行无异常！")
finally:
    print("代码执行完毕")"""
"""
捕捉到了异常（会先执行except、再执行finally）
print(a)  
print("捕捉到了异常信息！")   因为报错了，所以会执行excpet
print("报错了")
print("代码执行完毕")
"""
# 当try没有捕捉到异常信息
"""try:
    a = 10
    print(a)
except:
    print("报错了！")
else:
    print("代码运行正常！")
finally:
    print("代码运行完毕！")"""
"""
先执行try
再执行else
最后执行finally
a = 10
print(a)
print("代码运行正常！")
print("代码运行完毕！")
"""

# 变量没有先定义，所以报错
# print(b)
# 除0异常
# print(1/0) # ZeroDivisionError: division by zero
# 可以指定捕捉异常类型：万能捕捉
"""try:
    print(c) # 报错了，c name is not defined ，没有定义这个c变量
except Exception as e: #Exception是万能捕捉信息
    print(f"报错内容为：{e}\n请检查你的代码！") # 会走带这里
else:
    print("没有异常！")
finally:
    print("代码执行完毕！")"""
"""
print(c)
print(f"报错内容为：{e}\n请检查你的代码！") # 会走带这里 e 就会把报错信息打印出来
print("代码执行完毕！")
"""
# 指定捕捉异常类型：NameError
"""try:
    print(d)
except NameError as e: # 名称没有定义
    print(f"报错信息为：{e}")
else:
    print("没有异常！")
finally:
    print("代码执行完毕！")"""
"""
print(d)
print(f"报错信息为：{e}")
print("代码执行完毕！")
"""
# 指定异常捕捉类型：ZeroDivisionError
"""try:
    print(1/0)
except ZeroDivisionError as e:
    print(f"出现异常为：{e}，请检查代码！")
else:
    print("代码没有异常！")
finally:
    print("代码执行完毕！")"""
"""
print(1/0)  # 报错了，除零异常
print(f"出现异常为：{e}，请检查代码！")
print("代码执行完毕！")
"""
# 捕捉异常多分子
"""try:
    print(a) # 先走到NameERROR，所以会报错
    print(1/0)
except ZeroDivisionError as e:
    print(f"报错，异常信息为：{e}，请检查你的代码！")
except NameError as e: # 直接跳到这里
    print(f"报错，异常信息为：{e}，请检查你的代码！")
except StopIteration as e: # 迭代器取值为空，报错
    print(f"报错，异常信息为：{e}，请检查你的代码！")
else:
    print("代码无异常！")
finally:
    print("代码运行结束！")"""
"""
print(a)
print(f"报错，异常信息为：{e}，请检查你的代码！")
print("代码运行结束！")
"""
# 断言：断言就是指用预期结果和实际结果比对，看是否是符合预期的
# name = input("请输入你的姓名")

# 断言是否相等，如果断言成功，不会有任何显示，如果失败则报错
# assert name== "好健康"

#断言是否包含，如果断言成功，不会有任何显示，如果失败则报错
# assert name in ["好健康","社会琳"]

#断言是否不相等，如果断言成功，不会有任何显示，如果失败则报错
# assert name!="好健康"

#断言是否不包含，如果断言成功，不会有任何显示，如果失败则报错
# assert name not in ["好健康","社会琳"]

#断言或者的关系
# assert name == "好健康" or name == "社会琳"

#断言地址值是否相等
"""
a = 10
c = 10
assert a is c
print(id(a)) # 查看地址值
print(id(c)) # 查看地址值
"""

# 主动抛出异常信息
"""address = input("请输入你的地址：")
if address !="沈阳": # 当输入的地址不是沈阳时
    raise NameError("不是沈阳人，不对劲儿") # 主动抛出异常，自定义类型为NameError
else:
    print(f"输入的：{address}地址正确！")"""














